#define _CRT_SECURE_NO_WARNINGS 1
class Solution {
public:
    int maxProduct(vector<int>& nums) {
        int n = nums.size(), ret = -2e5;
        vector<int> fp(n + 1), gp(n + 1);
        fp[0] = gp[0] = 1;
        for (int i = 1; i <= n; i++)
        {
            if (nums[i - 1] == 0)
            {
                fp[i] = 0;
                gp[i] = 0;
            }
            else if (nums[i - 1] < 0)
            {
                fp[i] = max(nums[i - 1], gp[i - 1] * nums[i - 1]);
                gp[i] = min(nums[i - 1], fp[i - 1] * nums[i - 1]);
            }
            else
            {
                fp[i] = max(nums[i - 1], fp[i - 1] * nums[i - 1]);
                gp[i] = min(nums[i - 1], gp[i - 1] * nums[i - 1]);
            }
        }
        for (int i = 1; i <= n; i++) ret = max(ret, fp[i]);

        return ret;
    }
};